# 150.逆波兰表达式求值
# 根据逆波兰表示法，求表达式的值。
# 有效的算符包括 +、-、 * 、 / 。每个运算对象可以是整数，也可以是另一个逆波兰表达式。
# 注意两个整数之间的除法只保留整数部分。
# 可以保证给定的逆波兰表达式总是有效的。换句话说，表达式总会得出有效数值且不存在除数为0的情况。
#
#
# 示例1：
# 输入：tokens = ["2", "1", "+", "3", "*"]
# 输出：9
# 解释：该算式转化为常见的中缀算术表达式为：((2 + 1) * 3) = 9
#
# 示例2：
# 输入：tokens = ["4", "13", "5", "/", "+"]
# 输出：6
# 解释：该算式转化为常见的中缀算术表达式为：(4 + (13 / 5)) = 6



class Solution:
    def evalRPN(self, tokens) -> int:
        stack = []
        operator = ['+','-','*','/']
        for i in tokens:
            if i not in operator:
                stack.append(int(i))
            else:
                op1 = stack.pop()
                op2 = stack.pop()
                if i == '+':
                    res = op2 + op1
                elif i == '-':
                    res = op2 + op1
                elif i == '*':
                    res = op2 * op1
                else:
                    res = int(op2 / op1)
                # res = int(eval(f"{op2}{i}{op1}"))
                # 这里我考虑了一下，没有用eval函数，感觉这个函数虽然很好用，但是感觉是考点
                stack.append(res)
        return stack[0]


if __name__ == '__main__':
    tokens = ["2", "1", "+", "3", "*"]
    tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
    # tokens = ["4","13","5","/","+"]
    tmp = Solution()
    res = tmp.evalRPN(tokens)
    print(res)
